<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>reduce map 迭代器，有什么不同</title>
</head>

<body>
  <script>
    var arr = [15, 16, 49, 64, 51, 20]
    // map() 返回一个新数组，其结果是该数组中的每个元素都调用一次提供的回调函数后返回的结果
    // 同时使用 reduce 和 map 实现偶数之和
    var fn = function () {
      var even = (total, num) => {
        // console.log(total, num)
        if (num % 2 == 0) {
          return total + num
        }
        return total
      }
      return arr.reduce(even, 0)
    }
    // console.log(arr.map(fn))
    var res = arr.map(fn)
    for (i in res) { }
    console.log(res[i]);


    // reduce() 方法接收一个函数作为累加器，数组中的每个值（从左到右）开始缩减，最终计算为一个值
    // 使用 reduce 实现奇数之和
    // total 是将数组中的元素从左到右开始缩减
    // num 是数组中的每个元素
    var odd = (total, num) => {
      // console.log(total, num)
      if (num % 2 != 0) {
        return total + num
      }
      return total
    }
    // odd 是要调用的函数，0 是添加到数组开头的元素，因为数组中的第一个元素会在 total 里面
    console.log(arr.reduce(odd, 0))

  </script>
</body>

</html>